//package com.awb.netty;
//
//import com.awb.service.SendService;
//import io.netty.channel.Channel;
//import io.netty.channel.ChannelHandlerContext;
//import io.netty.channel.ChannelInboundHandlerAdapter;
//import io.netty.handler.timeout.IdleState;
//import io.netty.handler.timeout.IdleStateEvent;
//import org.apache.commons.lang.StringUtils;
//import org.apache.commons.logging.Log;
//import org.apache.commons.logging.LogFactory;
//
//import javax.annotation.Resource;
//import java.util.Map;
//import java.util.Objects;
//
///**
// * @Author: szw
// * @Date: 2020/8/3 17:18
// * netty服务端处理器
// */
//public class NettyServerHandler2 extends ChannelInboundHandlerAdapter {
//
//    @Resource
//    SendService sendService;
//
//    protected static final Log LOGGER = LogFactory.getLog(NettyServerHandler2.class);
//
//    /**
//     * 客户端连接会触发
//     */
//    @Override
//    public void channelActive(ChannelHandlerContext ctx) throws Exception {
//        LOGGER.info("客户端连接: Channel active......" + ctx.channel().remoteAddress().toString());
//    }
//
//    /**
//     * 客户端发消息会触发
//     */
//    @Override
//    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
//        try {
//            String m1 = msg.toString();
//            String m=m1.replaceAll("","");
//            LOGGER.debug("服务器收到消息: " + m);
//            LOGGER.debug("服务器收到消息的长度: " + m.length());
//            if (StringUtils.isBlank(m)) {
//                LOGGER.info("m为空： ");
//                return;
//            }
////            String s = CodeUtil.asciiToString(m);
////            if (StringUtils.isBlank(s) || !s.contains("AWBD")) {
////                LOGGER.info("asctostr ： "+s);
////                return;
////            }
//            if (StringUtils.isBlank(m) || !m.contains("AWBD")) {
//                LOGGER.info("asctostr ： "+m);
//                return;
//            }
//
//            LOGGER.info("解码:" + m);
//            String machineNumber = m.substring(1, 11);
//            String command = m.substring(11,13);
//            String command2 =m.substring(11);
//            Channel channel = ctx.channel();
//            System.out.println("=======" + machineNumber + "........."+ command + "........."+ channel);
//            System.out.println("=====长度=" + machineNumber.length() + "........."+ command.length() + "........."+ channel);
//
//            //绑定请求、服务端收到设备响应
//            //保存客户端
//            String err = machineNumber;
//                LOGGER.info("绑定和解绑 ： "+m);
//                err = m;
//                if (StringUtils.equals(command, "01")) {
//                    LOGGER.info("绑定 ： "+m);
////                    clients.put(machineNumber, channel);
//                    sendService.clientsPut(machineNumber, channel);
//                    LOGGER.info("=================/////" + sendService.clients.toString());
//
////                    ctx.write(CodeUtil.stringToAscii(m +0001));
//                    ctx.write(m +0001);
//                    ctx.flush();
//                    return;
//                }
//                //解绑
//                if (StringUtils.equals(command, "02")) {
//                    LOGGER.info("解绑： "+m);
////                    clientsDel(machineNumber);
//                    sendService.clientsDel(machineNumber);
//
////                    ctx.write(CodeUtil.stringToAscii(m +0001));
//                    ctx.write(m +0001);
//                    ctx.flush();
//                    ctx.close();
//                    return;
//                }
//
//            if (command2.length() == 8) {
//                LOGGER.info("应答——————");
//                String comd = command2.substring(0, 2);
//                String status = command2.substring(2,6);
//                err = machineNumber + comd;
////                message.put(machineNumber, message.get(machineNumber).substring(0, 6) + status);
////                message.remove(machineNumber);
//                sendService.messageDel(machineNumber);
//
//                if (StringUtils.equals(status, "0001")) {
//                    LOGGER.debug("应答成功");
//                    LOGGER.info("应答成功");
//                }
//
//                if (StringUtils.equals(status, "0002")) {
//                    LOGGER.debug("应答失败");
//                    LOGGER.info("应答失败");
//                }
//            }
//
////            ctx.write(CodeUtil.stringToAscii(err +0002));
//            ctx.write(err +0002);
//            ctx.flush();
//        } catch (Exception e) {
//            ctx.channel().close();
//            LOGGER.error("接收消息发生异常: exceptionCaught Exception");
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 发生异常触发
//     */
//    @Override
//    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
//        try {
//            for (Map.Entry<String, Channel> entry : sendService.clients.entrySet()){
//                if (entry.getValue() == ctx.channel()){
//                    sendService.clientsDel(entry.getKey());
//                    LOGGER.error("------["+entry.getKey()+"]disConnect,heartBeat timeOut-------");
//                    break ;
//                }
//            }
//        } catch (Exception e) {
//            LOGGER.error("exceptionCaught catch Exception");
//            e.printStackTrace();
//        } finally {
//            cause.printStackTrace();
//            ctx.channel().close();
//        }
//    }
//
//    /**
//     * 长连接超时处理
//     * @author zwb
//     * @date
//     * @param
//     * @return 注释break
//     */
//    @Override
//    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
//        LOGGER.error("长连接超时处理");
//        if (evt instanceof IdleStateEvent) {//超时事件
//            IdleStateEvent idleEvent = (IdleStateEvent) evt;
//            if (idleEvent.state() == IdleState.READER_IDLE) {//读
//                LOGGER.info("读 ："+idleEvent);
//                for (Map.Entry<String, Channel> entry : sendService.clients.entrySet()){
//                    if (entry.getValue() == ctx.channel()){
//                        sendService.clientsDel(entry.getKey());
//                        break ;
//                    }
//                }
//                LOGGER.error("长连接超时处理");
//                ctx.channel().close();
//            } else if (idleEvent.state() == IdleState.WRITER_IDLE) {//写
//                LOGGER.info("写 ："+idleEvent);
//            } else if (idleEvent.state() == IdleState.ALL_IDLE) {//全部
//                LOGGER.info("全部 ："+idleEvent);
//            }
//        }
//    }
//
//    @Override
//    public void handlerRemoved(ChannelHandlerContext ctx) throws Exception{
//        //执行客户端断开连接后的业务操作
//        Channel channel = ctx.channel();
//        channel.close();
////        Collection<Channel> col = clients.values();
//        for (Map.Entry<String, Channel> entry : sendService.clients.entrySet()) {
//            if (Objects.equals(entry.getValue(), channel)) {
////                set.add(entry.getKey());
//                sendService.clientsDel(entry.getKey());
//                LOGGER.info("断开连接:" + entry.getKey());
//            }
//        }
////        while(col.contains(channel)) {
////            col.remove(channel);
////        }
//        LOGGER.info("断开连接");
//    }
//}
